package structuralModel.flyWeightModel;

import java.util.HashMap;
import java.util.Map;

/**
 * 功能描述: 享元工厂 负责创建和管理享元对象。它维护一个享元池，用于存储已经创建的享元对象，以便在需要时进行复用。
 * 2024/02/10
 * <p>
 * ZhangYi
 */
public class FlyWeightFactory {

    /**
     * 用于存储已经创建的享元对象，以便在需要时进行复用。  充当 池的作用
     */
    private Map<String, WebSite> pool = new HashMap<>();


    /**
     * 功能描述: 享元模式 - 获取 WebSite 对象
     *
     * @param type
     * @return {@link WebSite }
     */
    public WebSite getWebSite(String type) {
        // 1. 从 pool 中获取
        WebSite webSite = pool.get(type);
        if (webSite == null) { // 2. 如果不存在，创建一个; 并放入 pool 中
            webSite = new WebSiteCompoent(type);
            pool.put(type,
                     webSite);
        }
        return webSite;
    }

    /**
     * 功能描述: 获取 享元模式 对象的数量  池中的数量
     *
     * @return int
     */
    public int getWebSiteCount() {
        return pool.size();
    }
}
